#ifndef PROGRESSICONGENERATOR_H
#define PROGRESSICONGENERATOR_H

#include <QIcon>
#include <QPixmap>
#include <QPainter>
#include <QColor>
#include <QHash>
#include <QString>

/**
 * @brief 进度图标生成器
 * 
 * 专门负责生成各种风格的进度图标：
 * - 饼图进度图标
 * - 圆形进度图标
 * - 条形进度图标
 * - 动画进度图标
 * 
 * 设计特点：
 * - 支持多种进度显示风格
 * - 自动缓存，提高性能
 * - 支持自定义颜色和样式
 * - 遵循苹果设计美学
 */
class ProgressIconGenerator
{
public:
    // 进度图标风格枚举
    enum class ProgressStyle {
        Pie,        // 饼图风格
        Circular,   // 圆形进度条
        Bar,        // 条形进度条
        Dots,       // 点状进度
        Spinner     // 旋转加载器
    };
    
    // 图标尺寸枚举
    enum class IconSize {
        Small = 16,   // 小图标
        Medium = 24,  // 中图标
        Large = 32,   // 大图标
        XLarge = 48   // 超大图标
    };

    /**
     * @brief 创建进度图标
     * @param progress 进度百分比（0-100）
     * @param style 进度风格
     * @param size 图标尺寸
     * @return 进度图标
     */
    static QIcon createProgressIcon(int progress, ProgressStyle style = ProgressStyle::Pie, 
                                   IconSize size = IconSize::Small);
    
    /**
     * @brief 创建饼图进度图标
     * @param progress 进度百分比（0-100）
     * @param size 图标尺寸
     * @return 饼图进度图标
     */
    static QIcon createPieProgressIcon(int progress, IconSize size = IconSize::Small);
    
    /**
     * @brief 创建圆形进度图标
     * @param progress 进度百分比（0-100）
     * @param size 图标尺寸
     * @return 圆形进度图标
     */
    static QIcon createCircularProgressIcon(int progress, IconSize size = IconSize::Small);
    
    /**
     * @brief 创建条形进度图标
     * @param progress 进度百分比（0-100）
     * @param size 图标尺寸
     * @return 条形进度图标
     */
    static QIcon createBarProgressIcon(int progress, IconSize size = IconSize::Small);
    
    /**
     * @brief 创建点状进度图标
     * @param progress 进度百分比（0-100）
     * @param size 图标尺寸
     * @return 点状进度图标
     */
    static QIcon createDotsProgressIcon(int progress, IconSize size = IconSize::Small);
    
    /**
     * @brief 创建旋转加载器图标
     * @param size 图标尺寸
     * @return 旋转加载器图标
     */
    static QIcon createSpinnerIcon(IconSize size = IconSize::Small);
    
    /**
     * @brief 创建自定义颜色进度图标
     * @param progress 进度百分比（0-100）
     * @param primaryColor 主色调
     * @param backgroundColor 背景色
     * @param style 进度风格
     * @param size 图标尺寸
     * @return 自定义颜色进度图标
     */
    static QIcon createCustomProgressIcon(int progress, const QColor& primaryColor, 
                                         const QColor& backgroundColor = QColor(),
                                         ProgressStyle style = ProgressStyle::Pie,
                                         IconSize size = IconSize::Small);
    
    /**
     * @brief 清除缓存
     */
    static void clearCache();
    
    /**
     * @brief 获取缓存大小
     * @return 缓存大小
     */
    static int getCacheSize();

private:
    // 图标缓存
    static QHash<QString, QIcon> s_iconCache;
    static QHash<QString, QPixmap> s_pixmapCache;
    
    // 生成方法
    static QPixmap generatePieProgressPixmap(int progress, IconSize size);
    static QPixmap generateCircularProgressPixmap(int progress, IconSize size);
    static QPixmap generateBarProgressPixmap(int progress, IconSize size);
    static QPixmap generateDotsProgressPixmap(int progress, IconSize size);
    static QPixmap generateSpinnerPixmap(IconSize size);
    
    // 绘制辅助方法
    static void drawPieProgress(QPainter& painter, const QRect& rect, int progress, 
                              const QColor& primaryColor, const QColor& backgroundColor);
    static void drawCircularProgress(QPainter& painter, const QRect& rect, int progress,
                                    const QColor& primaryColor, const QColor& backgroundColor);
    static void drawBarProgress(QPainter& painter, const QRect& rect, int progress,
                               const QColor& primaryColor, const QColor& backgroundColor);
    static void drawDotsProgress(QPainter& painter, const QRect& rect, int progress,
                                const QColor& primaryColor, const QColor& backgroundColor);
    static void drawSpinner(QPainter& painter, const QRect& rect, const QColor& primaryColor);
    
    // 生成缓存键
    static QString generateCacheKey(const QString& type, int progress, IconSize size);
    static QString generateCustomCacheKey(const QString& type, int progress, 
                                         const QColor& primaryColor, const QColor& backgroundColor, 
                                         IconSize size);
    
    // 颜色辅助方法
    static QColor getDefaultPrimaryColor();
    static QColor getDefaultBackgroundColor();
    static QColor getProgressColor(int progress);
};

#endif // PROGRESSICONGENERATOR_H
